<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 构造函数可以用于创建对象，同时构造函数也为当前语言环境新增了新的数据类型
        // 继承（原型链继承）：
        //     子类可以继承父类的所有属性
        //     子类可以基于调用父类所有的原型方法
        function Parent(){
            this.x=0;
            this.y=1;
        } 
       
        Parent.prototype.move=function(){
            console.log("move");
        };
        function Child(){
            this.w=100;
            this.h=200;
            Parent.call(this);
        }
       
        var c=new Child();
        console.log(c);
/* 
       用一个基于父构造函数原型创建的对象替换子构造函数的原型
            1.子构造函数原型指向于父构造函数原型
            2.将子构造函数原型覆盖，如果需要是类型相关的，必须添加constructor属性
            */

        Child.prototype=Object.create(Parent.prototype);
        Child.prototype.constructor=Child;
        Child.prototype.calc=function(){
            var s=this.w*this.h;
            console.log("面积："+s);
        };
        var c2=new Child();
        console.log(c2.constructor);
        c2.calc();
        // c2 ---->Child.prototype ---->  Parent.prototype---->Object.prototype
        console.log(c2.__proto__===Child.prototype);
        console.log( Child.prototype.__proto__===Parent.prototype);
        console.log(Parent.prototype.__proto__===Object.prototype);
        c2.move();
        console.log(c2 instanceof Child);
        console.log(c2 instanceof Parent);
        console.log(c2 instanceof Object);
    </script>
</head>
<body>
    
</body>
</html>